TC-unpack.ahk:TC解压助手 v0.9

TC-unpack(TC解压助手)是用来辅助TC(Total Commander)解压功能的一小段AutoHotkey脚本,用来在解压对话框中自动按键,功能有二:一是删除解压路径,以解压到当前目录;二是选中“Unpack each archive to a &separate subdir (name of the archive)”/“将各压缩包分别解压到同名的子文件夹中(&S)”项,以实现把文件名作为解压后的目录名。 tc-unpack.ahk

在TC的中、英文论坛中,都常有网友建议自动解压到当前目录(而非对面窗口)、自动(或默认)解压到同名子目录,但TC并未实现此功能。这算是本程序的大背景。小背景则是新网友daizhaolin来信,提出了这一要求。

其实,我自己很懒,多数时候都是手工按键的。并且这样做有一个好处,就是能发现压缩包内是散着的N个文件,还是已经包含在一个目录中。如果是前者,则选建目录再解压入其中;如果是后者,则直接解压。但从我的观点来看,提倡压缩包内含目录。理由是,我们要提供一个完整解决方案,而非散乱的零部件。但是,遇到更懒(或称为更勤于追求自动化高效率)的网友,我仍愿意提供如下脚本。朋友们可自由借鉴、使用、指正、传播。

源代码1

下面是善用佳软作为ahk的不求深解者写的代码,特点是用最简单的ahk语句,完全模拟击键实现功能。(注:如下代码的高亮格式由gvim生成)

;TC-unpack(TC解压助手)v0.9/081017 ;主页:http://xbeta.info/tc-unpack.htm#singleinstance,force SetTitleMatchMode, 2

;本段程序功能:在TC中,按alt+F9出现解压对话框后,自动清空解压目录,这样就解压到当前目录了。 !F9:: IfWinActive Total Commander { sendplay, !{F9} WinWaitActive, Unpack files ;这是等待解压对话框出现,如果是中文版本,应该把Unpack files换为对应的中文窗口标题,或换为 ahk_class TDLGUNZIPALL send, {del} ;send, {enter} ;如果你想自动按下回车,请取消上一行的注释。后果自负! } else sendplay, !{F9} ;保证在其他程序中,不影响Alt+F9的正常功能。 return

;本段程序功能:在TC中,按ctrl+alt+F9出现解压对话框后,自动清空解压目录,自动选中“Unpack each archive to a &separate subdir (name of the archive)”。语句基本同上。 ^!F9:: IfWinActive Total Commander { sendplay, !{F9} WinWaitActive, Unpack files send, {del} send, !s ;自动按下alt+s,让TC选中该选项 ;send, {enter} } else sendplay, ^!{F9} return

源代码2

以下是Jameson给出的ahk代码,更通用,更可靠,效率也更高。 说明1:下述代码及Jameson留言中的“PostMessage, 0×111”,0与111之间是字母x(xbeta的x),而不是其他符号。复制代码后请注意替换,以免WordPress自动转换的影响。 说明2:我试用如下代码未能执行,或许是postmessage中 control id不同的原因。我在中文XP SP2下,用官方标准的Total Commander 7.04a 英文版,control id为4,可以正常运行。

;Jameson改进版本 #NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. #singleinstance force SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.#IfWinActive ahk_class TTOTAL_CMD ;这一句的作用是,当 TC 激活时热键才生效。用类名判断,通用性比较好,中英文界面都可以。 !F9:: ;~ send, !{F9} PostMessage, 0x111, 181,,, ahk_class TTOTAL_CMD ;发送消息解压消息,同样是因为通用性比较好,不受快捷键的限制。 return msgbox,1 WinWaitActive, ahk_class TDLGUNZIPALL,, 1 ;如果选择的是不能解压的文件会弹出错误窗口,限制等待时间为 1 秒,如果等不到解压窗口就退出。 If ErrorLevel { Return } Else { controlSend,, {Del}, ahk_class TDLGUNZIPALL } ;send, {enter} Return

^!F9:: ;~ sendplay, !{F9} PostMessage, 0x111, 181,,, ahk_class TTOTAL_CMD WinWaitActive, ahk_class TDLGUNZIPALL,, 1 If ErrorLevel { Return } Else { controlSend,, {Del}, ahk_class TDLGUNZIPALL Send, !S } ;send, {enter} Return

说明

如果你有AutoHotkey的基本知识,并且安装了AutoHotkey,看过了上述说明,就可以使用tc-unpack.ahk了。阅读TC学堂第3讲:压缩及插件、善用佳软AutoHotkey系列文章也会帮你了解更多技巧。